package registratiesysteem;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ZoekScherm.java
 *
 * Created on 8-jan-2010, 21:23:02
 */
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Martin
 */
class ZoekScherm extends javax.swing.JFrame {

    /** Creates new form ZoekScherm */
    ZoekScherm(BeheerMenu hetParentMenu) {
        initComponents();
        parentMenu = hetParentMenu;
        model = (DefaultTableModel) jtLijst.getModel();
        jtLijst.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    }

    public void initialiseerZoekScherm(SpeelgoedInvoerScherm hetSpeelgoedInvoerScherm, BeheerMenu.BewerkFunctie hetSoortBewerking, ArrayList<ArrayList<String>> hetSpeelgoed) {
        ((DefaultTableModel) jtLijst.getModel()).setRowCount(0);
        ((DefaultTableModel) jtLijst.getModel()).setColumnCount(8);
        String[] kolomText = {"Speelgoedcode", "Naam", "Omschrijving", "Aankoopdatum", "Aankoopbedrag", "Leeftijd van", "Leeftijd tot", "Aantal onderdelen"};
        ((DefaultTableModel) jtLijst.getModel()).setColumnIdentifiers(kolomText);
        for (int rij = 0; rij < hetSpeelgoed.size(); ++rij) {
            ((DefaultTableModel) jtLijst.getModel()).addRow(hetSpeelgoed.get(rij).toArray());
        }
        speelgoedInvoerScherm = hetSpeelgoedInvoerScherm;
        soortObject = Hoofdmenu.BeheerObject.SPEELGOED;
        soortBewerking = hetSoortBewerking;
        parentMenu.setStatusbarText(jlStatusbar, "Selecteer een stuk speelgoed om het te bewerken.", Color.BLACK);
    }

    void initialiseerZoekScherm(LedenInvoerScherm hetLedenInvoerScherm, BeheerMenu.BewerkFunctie hetSoortBewerking, ArrayList<ArrayList<String>> deLeden) {
        model.setRowCount(0);
        model.setColumnCount(lidKolommen.length);
        model.setColumnIdentifiers(lidKolommen);
        for (int rij = 0; rij < deLeden.size(); ++rij) {
            model.addRow(deLeden.get(rij).toArray());
        }

        ledenInvoerScherm = hetLedenInvoerScherm;
        soortObject = Hoofdmenu.BeheerObject.LEDEN;
        soortBewerking = hetSoortBewerking;
        parentMenu.setStatusbarText(jlStatusbar, "Selecteer een lid om het te bewerken.", Color.BLACK);
    }

    void initialiseerZoekScherm(UitleningenInvoerScherm hetUitleningenInvoerScherm, BeheerMenu.BewerkFunctie hetSoortBewerking, ArrayList<ArrayList<String>> uitleningen) {
        uitleningenInvoerScherm = hetUitleningenInvoerScherm;
        soortObject = Hoofdmenu.BeheerObject.UITLENINGEN;
        soortBewerking = hetSoortBewerking;
        model.setRowCount(0);

        switch (hetSoortBewerking) {
            case LIDNUMMER:
                model.setColumnCount(lidKolommen.length);
                model.setColumnIdentifiers(lidKolommen);
                break;
            case SPEELGOED_CODE:
                model.setColumnCount(speelgoedKolommen.length);
                model.setColumnIdentifiers(speelgoedKolommen);
                break;
            default:
                model.setColumnCount(uitleningKolommen.length);
                model.setColumnIdentifiers(uitleningKolommen);
        }
        for (int rij = 0; rij < uitleningen.size(); ++rij) {
            model.addRow(uitleningen.get(rij).toArray());
        }
        parentMenu.setStatusbarText(jlStatusbar, uitleningen.size() + " resultaten gevonden", Color.BLACK);
    }

    public void initialiseerZoekScherm(OnderdelenInvoerScherm hetonderdelenInvoerScherm,  OnderdelenInvoerScherm.OpgevraagdeGegevens hetSoortGegevens, ArrayList<ArrayList<String>> hetGevraagde) {
        gegevens = hetSoortGegevens;
        model.setRowCount(0);
        soortObject = Hoofdmenu.BeheerObject.RESERVEONDERDELEN;
        //soortBewerking = hetSoortBewerking;

        switch (hetSoortGegevens) {
            case SPEELGOED_CODE:
                model.setColumnCount(reserveKolomen.length);
                model.setColumnIdentifiers(reserveKolomen);
                //for (int rij = 0; rij < hetGevraagde.size(); ++rij) {
                //    ((DefaultTableModel) jtLijst.getModel()).addRow(hetGevraagde.get(rij).toArray());
                //}
                onderdelenInvoerScherm = hetonderdelenInvoerScherm;
                parentMenu.setStatusbarText(jlStatusbar, "Selecteer een stuk speelgoed", Color.BLACK);
                break;
            case ONDERDEEL_CODE:
                model.setRowCount(0);
                model.setColumnCount(onderdeelKolomen.length);
                model.setColumnIdentifiers(onderdeelKolomen);
            // for (int rij = 0; rij < hetGevraagde.size(); ++rij) {
            //    ((DefaultTableModel) jtLijst.getModel()).addRow(hetGevraagde.get(rij).toArray());
            //}
        }
        for (int rij = 0; rij < hetGevraagde.size(); ++rij) {
            ((DefaultTableModel) jtLijst.getModel()).addRow(hetGevraagde.get(rij).toArray());
        }
        onderdelenInvoerScherm = hetonderdelenInvoerScherm;
        parentMenu.setStatusbarText(jlStatusbar, "Selecteer een onderdeel", Color.BLACK);

    }

    void initialiseerZoekScherm(OverzichtenScherm hetOverzichtenScherm, BeheerMenu.BewerkFunctie hetSoortBewerking) {
        overzichtenScherm = hetOverzichtenScherm;
        soortObject = Hoofdmenu.BeheerObject.OVERZICHTEN;
        soortBewerking = hetSoortBewerking;
        parentMenu.setStatusbarText(jlStatusbar, "Selecteer het speelgoed waarvan een overzicht moet worden weergegeven.", Color.BLACK);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane2 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel2 = new javax.swing.JLabel();
        jlStatusbar = new javax.swing.JLabel();
        jbSelecteer = new javax.swing.JButton();
        jbAnnuleren = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtLijst = new javax.swing.JTable();

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane2.setViewportView(jTable1);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 24));
        jLabel2.setText("Zoek resultaten");

        jlStatusbar.setText("Statusbar");
        jlStatusbar.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jbSelecteer.setText("Selecteer");
        jbSelecteer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbSelecteerActionPerformed(evt);
            }
        });

        jbAnnuleren.setText("Annuleren");
        jbAnnuleren.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbAnnulerenActionPerformed(evt);
            }
        });

        jtLijst.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Lidnummer", "Aanhef", "Voornaam", "Tussenvoegsel", "Achternaam", "Straat", "Huisnummer", "Toevoeging", "Postcode", "Plaats"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jtLijst.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jtLijst.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(jtLijst);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jlStatusbar, javax.swing.GroupLayout.DEFAULT_SIZE, 784, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(250, Short.MAX_VALUE)
                .addComponent(jbSelecteer, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jbAnnuleren, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(234, 234, 234))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(305, Short.MAX_VALUE)
                .addComponent(jLabel2)
                .addGap(293, 293, 293))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 764, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 451, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbSelecteer)
                    .addComponent(jbAnnuleren))
                .addGap(18, 18, 18)
                .addComponent(jlStatusbar, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(61, 61, 61)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 409, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(80, Short.MAX_VALUE)))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jbSelecteerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbSelecteerActionPerformed
        int row = jtLijst.getSelectedRow();

        switch (soortObject) {
            case SPEELGOED:
                //Controleer of er een regel geselecteerd is.
                if (jtLijst.getSelectedRow() < 0) {
                    parentMenu.setStatusbarText(jlStatusbar, "Er is geen keuze gemaakt, selecteer een stuk speelgoed, of klik op Annuleren", Color.RED);
                } else {
                    //Sla de speelgoedcode die in de eerste kolom van de geselecteerde regel staat, op in een String.
                    String deSpeelgoedCode = (jtLijst.getValueAt(jtLijst.getSelectedRow(), 0)).toString();

                    System.out.println(deSpeelgoedCode);
                    speelgoedInvoerScherm.initialiseerInvoerScherm(soortBewerking, deSpeelgoedCode);
                    speelgoedInvoerScherm.setLocationRelativeTo(null);
                    speelgoedInvoerScherm.setVisible(true);
                    this.setVisible(false);
                }
                break;
            case RESERVEONDERDELEN:
                //Controleer of er een regel geselecteerd is.

                if (jtLijst.getSelectedRow() < 0) {
                    parentMenu.setStatusbarText(jlStatusbar, "Er is geen keuze gemaakt, selecteer een stuk speelgoed, of klik op Annuleren", Color.RED);
                } else {


                    if(gegevens == gegevens.ONDERDEEL_CODE){
                    //Sla de keuze die in de eerste kolom van de geselecteerde regel staat, op in een String.
                    int hetOnderdeelNummer = Integer.parseInt((jtLijst.getValueAt(jtLijst.getSelectedRow(), 0)).toString());
                    onderdelenInvoerScherm.initialiseerInvoerscherm(hetOnderdeelNummer);
                    }
                    if(gegevens == gegevens.SPEELGOED_CODE){
                    String deSpeelgoedCode = ((jtLijst.getValueAt(jtLijst.getSelectedRow(), 0)).toString());
                    onderdelenInvoerScherm.initialiseerInvoerscherm(deSpeelgoedCode);
                    }

                    //onderdelenInvoerScherm.initialiseerInvoerscherm(soortBewerking, hetOnderdeelNummer);
                    onderdelenInvoerScherm.setLocationRelativeTo(null);
                    onderdelenInvoerScherm.setVisible(true);
                    this.setVisible(false);
                }
                break;
            case LEDEN:
                //Controleer of er een regel geselecteerd is.
                if (jtLijst.getSelectedRow() < 0) {
                    parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Er is geen keuze gemaakt, selecteer een lid, of klik op Annuleren", Color.RED);
                } else {
                    //Sla het lidnummer wat in de eerste kolom van de geselecteerde regel staat, op in een int.
                    int hetLidNummer = Integer.parseInt((jtLijst.getValueAt(jtLijst.getSelectedRow(), 0)).toString());
                    System.out.println(hetLidNummer);
                    ledenInvoerScherm.initialiseerInvoerScherm(soortBewerking, hetLidNummer);
                    ledenInvoerScherm.setLocationRelativeTo(null);
                    ledenInvoerScherm.setVisible(true);
                    this.setVisible(false);
                }
                break;
            case UITLENINGEN:
                if (row >= 0) {
                    if (soortBewerking == soortBewerking.LIDNUMMER) {
                        uitleningenInvoerScherm.jtfLidnummer.setText((String) jtLijst.getValueAt(jtLijst.getSelectedRow(), LedenInvoerScherm.LIDNR));
                    } else if (soortBewerking == soortBewerking.SPEELGOED_CODE) {
                        uitleningenInvoerScherm.jtfSpeelgoedCode.setText((String) jtLijst.getValueAt(jtLijst.getSelectedRow(), SpeelgoedInvoerScherm.CODE));
                    } else {
                        Uitlening u = new Uitlening();

                        u.setId(Integer.parseInt((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.ID)));
                        u.setLidnummer(Integer.parseInt((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.LIDNUMMER)));
                        u.setSpeelgoedCode((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.CODE));
                        u.setUitleendatum((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.UITLEENDATUM));
                        u.setVerloopdatum((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.VERLOOPDATUM));
                        u.setInleverdatum((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.INLEVERDATUM));
                        u.setBijzonderheden((String) jtLijst.getValueAt(row, UitleningenInvoerScherm.BIJZONDERHEDEN));
                        uitleningenInvoerScherm.initialiseerInvoerScherm(soortBewerking, u);
                    }
                    uitleningenInvoerScherm.setLocationRelativeTo(null);
                    uitleningenInvoerScherm.setVisible(true);
                    this.setVisible(false);
                } else {
                    parentMenu.setStatusbarText(jlStatusbar, "Er is geen keuze gemaakt, selecteer een uitlening, of klik op Annuleren", Color.RED);
                }
                break;
        }
}//GEN-LAST:event_jbSelecteerActionPerformed

    private void jbAnnulerenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbAnnulerenActionPerformed
        this.setVisible(false);

        switch (soortObject) {
            case LEDEN:
                ledenInvoerScherm.setVisible(true);
                break;
            case SPEELGOED:
                speelgoedInvoerScherm.setVisible(true);
                break;
            case UITLENINGEN:
                uitleningenInvoerScherm.setVisible(true);
                break;
            case OVERZICHTEN:
                overzichtenScherm.setVisible(true);
            case RESERVEONDERDELEN:
                onderdelenInvoerScherm.setVisible(true);
        }
}//GEN-LAST:event_jbAnnulerenActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTable1;
    private javax.swing.JButton jbAnnuleren;
    private javax.swing.JButton jbSelecteer;
    private javax.swing.JLabel jlStatusbar;
    private javax.swing.JTable jtLijst;
    // End of variables declaration//GEN-END:variables
    // Hier wordt een verwijzing naar het beheermenu opgenomen zodat we
    // vanuit dit scherm terug kunnen keren naar het beheermenu.
    private BeheerMenu parentMenu;
    // Hier wordt de enumeratie opgeslagen die bepaald naar welk type object
    // wordt gezocht en welke bewerking erop wordt uitgevoerd.
    private Hoofdmenu.BeheerObject soortObject;
    private BeheerMenu.BewerkFunctie soortBewerking;
    //In deze variabelen worden verwijzingen opgeslagen naar de verschillende
    //invoerschermen.
    private SpeelgoedInvoerScherm speelgoedInvoerScherm;
    private LedenInvoerScherm ledenInvoerScherm;
    private UitleningenInvoerScherm uitleningenInvoerScherm;
    private OverzichtenScherm overzichtenScherm;
    private OnderdelenInvoerScherm onderdelenInvoerScherm;
    private OnderdelenInvoerScherm.OpgevraagdeGegevens gegevens;
    private DefaultTableModel model;
    private String[] lidKolommen = {"Lidnummer", "Aanhef", "Voorletters", "Tussenvoegsel", "Naam", "Straat", "Huisnummer", "toevoeging", "Postcode", "Plaats"};
    private String[] speelgoedKolommen = {"Code", "Naam", "Aankoopdatum", "Aankoopbedrag", "Minimum leeftijd", "Maximum leeftijd", "Onderdelen"};
    private String[] uitleningKolommen = {"ID", "Lidnummer", "Speelgoed code", "Uitleendatum", "Verloopdatum", "Inleverdatum", "Bijzonderheden"};
    private String[] reserveKolomen = {"Speelgoedcode", "naam"};
    private String[] onderdeelKolomen = {"Onderdeelcode", "Speelgoedcode", "naam", "Lengte", "Hoogte", "Breedte", "Kleur", "Materiaal", "Voorraad"};
}
